//
//  XYObject.m
//  MyTest
//
//  Created by YaoZhaofeng on 16/6/28.
//  Copyright © 2016年 YaoZhaofeng. All rights reserved.
//

#import "XYObject.h"

@implementation XYObject 

- (id)init {
    if (self = [super init]) {
        self.name = @"haha";
//        _name = @"";
    }
    
    return self;
}

//在本类或者它的子类接收到第一个消息之前被runtime执行，类别中方法会覆盖类中方法
//runtime用线程安全的方式执行该方法
//父类比它的子类先执行该方法
//每个类只执行一次该方法，but,如果自己不实现该方法，或者子类中调用[super initialize]，那么父类中的该方法就会执行多遍
//不同类的initialize的调用顺序无法保证，要尽量减少这个方法中的代码，只写一些必要的少量代码
//类别中实现会覆盖类中实现
+ (void)initialize {
    //不知道[className self]是什么用法??
    if (self == [XYObject self]) {
        NSLog(@"我是父类initialize，此处代码块只执行一次,此处用法有待考证？？");
    }
    NSLog(@"我是父类initialize，此处代码，有可能会执行多次");
}


//当类或者类别被添加到运行时环境的时候，就会触发该方法，且类别中方法不会覆盖类中方法
//只要该类被添加到工程中，不管是否有地方引用，都会执行该方法
//父类比子类先执行，类比类别先执行
+ (void)load {
    NSLog(@"我是父类load:此方法只会执行一次，并且不会被类别中方法覆盖");
}


- (id)copyWithZone:(NSZone *)zone {
    NSLog(@"copyWithZone");
    return [XYObject new];
}
@end
